package com.taotao.search.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.taotao.common.SearchItem;
import com.taotao.common.SearchResult;
/**
 * 通过query条件 搜索商品的dao层接口实现类
 * @author created by wq
 * @date   Sep 1, 2017---3:02:26 PM
 * @return
 * @throws Exception<br/>
 *==========History========== <br/>
 * taotao-search-service Sep 1, 2017
 */
@Repository
public class SearchDaoImpl {

	//我们做搜索时需要solrServer对象，同时我们在spring容器已经配置了HttpSolrServer
	@Autowired
	private SolrServer solrServer;
	
	/**
	 * 通过query条件 调用solr索引库  查询商品返回给 业务层
	 * 		最后返回值为searchResult,其实就是根据业务层传递过来的query条件 去索引库中
	 * 		查询到符合条件的商品数据，然后封装searchResult对象
	 * 	(封装成search.jsp页面需要将用户输入的query展示成商品)，
	 */
	public SearchResult searchItemBySolr(SolrQuery query) throws Exception{
		//调用solrServer查询返回值response
		QueryResponse response = solrServer.query(query);
		//首先通过response得到符合query的所有文档对象，返回值为list集合
		SolrDocumentList solrDocumentList = response.getResults();
		//得到查询的总记录数 recordCount,
		long numFound = solrDocumentList.getNumFound();
		//创建SearchItemList
		List<SearchItem> searchItemList = new ArrayList<>();
		//遍历solrDocumentList，得到每一个文档，然后封装到SearchItemList中
		for (SolrDocument solrDocument : solrDocumentList) {
			//创建SearchItem对象
			SearchItem item = new SearchItem();
			//封装item对象
			item.setId(Long.parseLong(solrDocument.get("id").toString()));
			item.setCategory_name((String) solrDocument.get("item_category_name"));
			//这里我们设置title为高亮显示
			String titleName = null;
			
			Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
			//得到要高亮显示的list集合
			List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
			//这里需要判断list不为null且size要大于0
			if(list != null && list.size()>0){
				titleName = list.get(0);
			}else{
				titleName = (String) solrDocument.get("item_title");
			}
			item.setTitle(titleName);
			
			//设置价格
			item.setPrice((Long) solrDocument.get("item_price"));
			//设置卖点
			item.setSell_point((String) solrDocument.get("item_sell_point"));
			//设置图片
			 List list2 = (List) solrDocument.get("item_image");
			item.setImage(list2.get(0).toString());
			
			//添加到searchItemList
			searchItemList.add(item);
		}
		
		//然后创建SearchResult对象
		SearchResult searchResult = new SearchResult();
		//封装总记录数
		searchResult.setRecordCount(numFound);
		//封装List<SearchItem>
		searchResult.setItemList(searchItemList);
		//封装总页数
		
		return searchResult;
	}

}
